home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 May / SGI IRIX 6.5 Applications 2004 May.iso / dist / java3d.idb / usr / demos / java / j3d / programs / examples / OffScreenCanvas3D / OffScreenTest.java.z / OffScreenTest.java
Encoding:
Java Source  |  2003-08-08  |  5.0 KB  |  164 lines

  1. /*
  2.  *    @(#)OffScreenTest.java 1.13 02/10/21 13:46:49
  3.  *
  4.  * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in
  15.  *   the documentation and/or other materials provided with the
  16.  *   distribution.
  17.  *
  18.  * Neither the name of Sun Microsystems, Inc. or the names of
  19.  * contributors may be used to endorse or promote products derived
  20.  * from this software without specific prior written permission.
  21.  *
  22.  * This software is provided "AS IS," without a warranty of any
  23.  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
  24.  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
  25.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
  26.  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
  27.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  28.  * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
  29.  * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  30.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
  31.  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
  32.  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
  33.  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  34.  *
  35.  * You acknowledge that Software is not designed,licensed or intended
  36.  * for use in the design, construction, operation or maintenance of
  37.  * any nuclear facility.
  38.  */
  39.  
  40. import com.sun.j3d.utils.geometry.ColorCube;
  41. import java.applet.Applet;
  42. import java.awt.*;
  43. import java.awt.event.*;
  44. import java.awt.image.BufferedImage;
  45. import com.sun.j3d.utils.applet.MainFrame;
  46. import com.sun.j3d.utils.universe.*;
  47. import javax.media.j3d.*;
  48. import javax.vecmath.*;
  49.  
  50. /**
  51.  * OffScreenTest issues renderOffScreenBuffer from the postSwap callback
  52.  * of the OnScreen canvas.
  53.  */
  54. public class OffScreenTest extends Applet {
  55.  
  56.     private SimpleUniverse u = null;
  57.  
  58.   public BranchGroup createSceneGraph(Raster drawRaster)
  59.   {
  60.     // Create the root of the branch graph
  61.     BranchGroup objRoot = new BranchGroup();
  62.  
  63.     // spin object has composited transformation matrix
  64.     Transform3D spin = new Transform3D();
  65.     Transform3D tempspin = new Transform3D();
  66.  
  67.     spin.rotX(Math.PI/4.0d);
  68.     tempspin.rotY(Math.PI/5.0d);
  69.     spin.mul(tempspin);
  70.     spin.setScale(0.7);
  71.     spin.setTranslation(new Vector3d(-0.4, 0.3, 0.0));
  72.  
  73.     TransformGroup objTrans = new TransformGroup(spin);
  74.     objRoot.addChild(objTrans);
  75.  
  76.     // Create a simple shape leaf node, add it to the scene graph.
  77.     // ColorCube is a Convenience Utility class
  78.     objTrans.addChild(new ColorCube(0.4));
  79.  
  80.     //Create a raster 
  81.     Shape3D shape = new Shape3D(drawRaster);
  82.     objRoot.addChild(shape);
  83.  
  84.     // Let Java 3D perform optimizations on this scene graph.
  85.     objRoot.compile();
  86.  
  87.     return objRoot;
  88.   }
  89.  
  90.   public OffScreenTest ()
  91.   {
  92.   }
  93.  
  94.     public void init() {
  95.     setLayout(new BorderLayout());
  96.     GraphicsConfiguration config =
  97.         SimpleUniverse.getPreferredConfiguration();
  98.     
  99.     BufferedImage bImage = new BufferedImage(200, 200 ,
  100.                          BufferedImage.TYPE_INT_ARGB);
  101.     
  102.     ImageComponent2D buffer =
  103.         new ImageComponent2D(ImageComponent.FORMAT_RGBA, bImage);
  104.     buffer.setCapability(ImageComponent2D.ALLOW_IMAGE_READ);
  105.     
  106.     Raster drawRaster = new Raster(new Point3f(0.0f, 0.0f, 0.0f),
  107.                        Raster.RASTER_COLOR,
  108.                        0, 0, 200, 200, buffer, null);
  109.     
  110.     drawRaster.setCapability(Raster.ALLOW_IMAGE_WRITE);
  111.     
  112.     // create the main scene graph
  113.     BranchGroup scene = createSceneGraph(drawRaster);
  114.     
  115.     // create the on-screen canvas
  116.     OnScreenCanvas3D d = new OnScreenCanvas3D(config, false);
  117.     add("Center", d);
  118.     
  119.     // create a simple universe
  120.     u = new SimpleUniverse(d);
  121.     
  122.     // This will move the ViewPlatform back a bit so the
  123.     // objects in the scene can be viewed.
  124.     u.getViewingPlatform().setNominalViewingTransform();
  125.     
  126.     // create an off Screen Canvas
  127.     
  128.     OffScreenCanvas3D c = new OffScreenCanvas3D(config, true, drawRaster);
  129.     
  130.     // set the offscreen to match the onscreen
  131.     Screen3D sOn = d.getScreen3D();
  132.     Screen3D sOff = c.getScreen3D();
  133.     sOff.setSize(sOn.getSize());
  134.     sOff.setPhysicalScreenWidth(sOn.getPhysicalScreenWidth());
  135.     sOff.setPhysicalScreenHeight(sOn.getPhysicalScreenHeight());
  136.     
  137.     // attach the same view to the offscreen canvas
  138.     View v = u.getViewer().getView();
  139.     v.addCanvas3D(c);
  140.     
  141.     // tell onscreen about the offscreen so it knows to
  142.     // render to the offscreen at postswap
  143.     d.setOffScreenCanvas(c);
  144.     
  145.     u.addBranchGraph(scene);
  146.     v.stopView();
  147.     // Make sure that image are render completely
  148.     // before grab it in postSwap().
  149.     d.setImageReady();
  150.     v.startView();
  151.  
  152.     }
  153.  
  154.     public void destroy() {
  155.     u.cleanup();
  156.     }
  157.   
  158.   
  159.   public static void main(String argv[])
  160.   {
  161.     new MainFrame(new OffScreenTest(), 500, 500);
  162.   }
  163. }
  164.